package com.optimus.db.dao.impl;

import com.optimus.common.cvo.EPCampanaCVO;
import com.optimus.common.cvo.EPCampanaCVOList;
import com.optimus.common.cvo.EPCampanaVOList;
import com.optimus.common.util.ApplicationException;
import com.optimus.common.util.ConstantesDB;
import com.optimus.common.vo.EPCampanaVO;
import com.optimus.common.vo.ResultadoVO;
import com.optimus.db.QueryFactory;
import com.optimus.db.dao.EPCampanaDAO;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author victor
 */
public class EPCampanaDAOImpl extends BaseDAO implements EPCampanaDAO{

    private static  Logger logger = LoggerFactory.getLogger(CampanaDAOImpl.class);

    public EPCampanaCVOList listar(EPCampanaCVO ePCampanaCVO) throws ApplicationException {
        Object[] logParams = new Object[2];
        EPCampanaCVOList result = new EPCampanaCVOList();
        result.setLista(new ArrayList<EPCampanaCVO>());
        result.setTicket(ePCampanaCVO.getTicket());
        EPCampanaCVO item = null;
        Long tk = result.getTicket();
        try {
            String queryStr=QueryFactory.instance().query("epcampana_listar", ePCampanaCVO.getTicket());
            logParams[0] = queryStr;
            logParams[1] =ePCampanaCVO.getIdCampanaRecoleccion();
            checkSession();
            session.beginTransaction();
            SQLQuery query = session.createSQLQuery(queryStr);
            query.setParameter("idcampanarecoleccion", ePCampanaCVO.getIdCampanaRecoleccion());
            Object objList = query.list();
            Object[] itemObj = null;
            for (Object obj : (List) objList) {
                itemObj = (Object[]) obj;
                item = new EPCampanaCVO();
                item.setCodigoEP(getInteger(itemObj[0], null, tk));
                item.setIdCampanaRecoleccion(getInteger(itemObj[1], null, tk));
                item.setOrden(getInteger(itemObj[2], null, tk));
                item.setFechaCreacion(getDate(itemObj[3], null, tk));
                item.setIdUsuario(getString(itemObj[4], null, tk));
                item.setT(getString(itemObj[5], null, tk));
                item.setEstadoRegistro(getString(itemObj[6], null, tk));
                item.setLatitud(getBigDecimal(itemObj[7], null, tk));
                item.setLongitud(getBigDecimal(itemObj[8], null, tk));
                result.getLista().add(item);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            throw new ApplicationException("MDB0000", e);
        } finally {
            logger.info("sql={} campana = {}", logParams);
        }
        return result;
    }

    public EPCampanaVOList listar(EPCampanaVO ePCampanaVO) throws ApplicationException {
        Object[] logParams = new Object[2];
        EPCampanaVOList result = new EPCampanaVOList();
        result.setLista(new ArrayList<EPCampanaVO>());
        result.setTicket(ePCampanaVO.getTicket());
        EPCampanaVO item = null;
        Long tk = result.getTicket();
        try {
            String queryStr=QueryFactory.instance().query("epcampana_listar", ePCampanaVO.getTicket());
            logParams[0] = queryStr;
            logParams[1] =ePCampanaVO.getIdCampanaRecoleccion();
            checkSession();
            session.beginTransaction();
            SQLQuery query = session.createSQLQuery(queryStr);
            query.setParameter("idcampanarecoleccion", ePCampanaVO.getIdCampanaRecoleccion());
            Object objList = query.list();
            Object[] itemObj = null;
            for (Object obj : (List) objList) {
                itemObj = (Object[]) obj;
                item = new EPCampanaVO();
                item.setCodigoEP(getInteger(itemObj[0], null, tk));
                item.setIdCampanaRecoleccion(getInteger(itemObj[1], null, tk));
                item.setOrden(getInteger(itemObj[2], null, tk));
                item.setFechaCreacion(getDate(itemObj[3], null, tk));
                item.setIdUsuario(getString(itemObj[4], null, tk));
                item.setT(getString(itemObj[5], null, tk));
                item.setEstadoRegistro(getString(itemObj[6], null, tk));
                result.getLista().add(item);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            throw new ApplicationException("MDB0000", e);
        } finally {
            logger.info("sql={} campana = {}", logParams);
        }
        return result;
    }

    public ResultadoVO guardar(EPCampanaVO ePCampanaVO) throws ApplicationException {
        Object[] logParams = new Object[12];
        ResultadoVO result = new ResultadoVO();
        result.setTicket(ePCampanaVO.getTicket());
        try {
            String queryStr=QueryFactory.instance().query("epcampana_insertar", ePCampanaVO.getTicket());
            logParams[0] = queryStr;
            Session session_db=session();
            session_db.beginTransaction();
            SQLQuery query = session_db.createSQLQuery(queryStr);
            query.setInteger("codigoep", ePCampanaVO.getCodigoEP());
            logParams[1]=ePCampanaVO.getCodigoEP();
            query.setInteger("idcampanarecoleccion", ePCampanaVO.getIdCampanaRecoleccion());
            logParams[2]=ePCampanaVO.getIdCampanaRecoleccion();
            query.setString("t", ePCampanaVO.getT());
            logParams[3]=ePCampanaVO.getT();
            query.setInteger("orden", ePCampanaVO.getOrden());
            logParams[4]=ePCampanaVO.getOrden();
            query.setString("estadoregistro", ePCampanaVO.getEstadoRegistro());
            logParams[5]=ePCampanaVO.getEstadoRegistro();
            query.setString("idusuario", ePCampanaVO.getIdUsuario());
            logParams[6]=ePCampanaVO.getIdUsuario();
            query.setDate("fechacreacion", ePCampanaVO.getFechaCreacion());
            //query.setString("fechacreacion", "2012-06-06");
            logParams[7]=ePCampanaVO.getFechaCreacion();
            query.setInteger("idcliente", ePCampanaVO.getIdCliente());
            logParams[8]=ePCampanaVO.getIdCliente();
            query.setInteger("correlmarca", ePCampanaVO.getCorrelMarca());
            logParams[9]=ePCampanaVO.getCorrelMarca();
            query.setString("marcacompetencia", ePCampanaVO.getMarcaCompetencia());
            logParams[10]=ePCampanaVO.getMarcaCompetencia();
            query.setString("nocompetencia", ePCampanaVO.getNoCompetencia());
            logParams[11]=ePCampanaVO.getNoCompetencia();
            int resultadoInt = query.executeUpdate();
            result.setCodigo(ConstantesDB.STATUS_OK);
            session_db.getTransaction().commit();
        } catch (Exception e) {
            result.setCodigo(ConstantesDB.STATUS_FAIL);
            e.printStackTrace();
            throw new ApplicationException("MDB0000", e);
        } finally {
            logger.info("sql={} codigoep={} idcampanarecoleccion={} t={} orden={} estadoregistro = {} " +
                    " idusuario={} fechacreacion={} idcliente={} correlmarca={} marcacompetencia={} " +
                    " nocompetencia={}", logParams);
        }
        return result;
    }

    public ResultadoVO actualizarOrden(EPCampanaVO ePCampanaVO) throws ApplicationException {
        Object[] logParams = new Object[4];
        ResultadoVO result = new ResultadoVO();
        result.setTicket(ePCampanaVO.getTicket());
        try {
            String queryStr=QueryFactory.instance().query("epcampana_actualizar_orden", ePCampanaVO.getTicket());
            logParams[0] = queryStr;
            checkSession();
            session.beginTransaction();
            SQLQuery query = session.createSQLQuery(queryStr);
            query.setInteger("codigoep", ePCampanaVO.getCodigoEP());
            logParams[1] = ePCampanaVO.getCodigoEP();
            query.setInteger("idcampanarecoleccion", ePCampanaVO.getIdCampanaRecoleccion());
            logParams[2] = ePCampanaVO.getIdCampanaRecoleccion();
            query.setInteger("orden", ePCampanaVO.getOrden());
            logParams[3] = ePCampanaVO.getOrden();

            int resultadoInt = query.executeUpdate();
            result.setCodigo(ConstantesDB.STATUS_OK);
            session.getTransaction().commit();
        } catch (Exception e) {
            result.setCodigo(ConstantesDB.STATUS_FAIL);
            throw new ApplicationException("MDB0000", e);
        } finally {
            logger.info("sql={} ep={} campana={} orden={} ", logParams);
        }
        return result;
    }

    public ResultadoVO eliminar(EPCampanaVO ePCampanaVO) throws ApplicationException {
        //idcampanarecoleccion
        Object[] logParams = new Object[4];
        ResultadoVO result = new ResultadoVO();
        result.setTicket(ePCampanaVO.getTicket());
        try {
            String queryStr=QueryFactory.instance().query("epcampana_eliminar", ePCampanaVO.getTicket());
            logParams[0] = queryStr;
            checkSession();
            session.beginTransaction();
            SQLQuery query = session.createSQLQuery(queryStr);
            query.setInteger("idcampanarecoleccion", ePCampanaVO.getIdCampanaRecoleccion());
            logParams[1] = ePCampanaVO.getIdCampanaRecoleccion();

            int resultadoInt = query.executeUpdate();
            result.setCodigo(ConstantesDB.STATUS_OK);
            session.getTransaction().commit();
        } catch (Exception e) {
            result.setCodigo(ConstantesDB.STATUS_FAIL);
            throw new ApplicationException("MDB0000", e);
        } finally {
            logger.info("sql={} ep={} campana={} orden={} ", logParams);
        }
        return result;
    }

}
